from abc import ABC, abstractmethod
from typing import List, Dict, Any, Optional

class BaseRAG(ABC):
    """RAG基类"""
    
    @abstractmethod
    def add_documents(self, documents: List[str], metadata: Optional[List[Dict[str, Any]]] = None) -> None:
        """
        添加文档到知识库
        参数:
            documents: 文档列表
            metadata: 元数据列表
        """
        pass
    
    @abstractmethod
    def query(
        self,
        question: str,
        **kwargs
    ) -> Dict[str, Any]:
        """
        处理用户查询
        参数:
            question: 用户问题
            **kwargs: 其他参数
        返回:
            包含答案和相关信息的字典
        """
        pass
